// 可以在此封装各种全局方法 hook
const hooks = {
  /**
   * @returns 随机生成一个可以当做 id 的不会重复的值，如：a4168e6598df6
   */
  getId() {
    return Math.random().toString(16).slice(2);
  },

  /**
   * 格式化时间函数，接收一个长度为 10 位 或者 13 位 的时间戳
   * @param {*} time 时间戳（不传默认为当前时间的时间戳）
   * @param {*} isGetText 是否需要返回 1分钟前 这种格式的时间描述（默认是）返回到对象中的 text 字段
   * @returns 返回一个对象
   */
  getDate(time = Number(new Date()), isGetText = true) {
    // 如果时间戳是 10位 的就 * 1000 转换为 毫秒
    const _time = time.toString().length > 10 ? time : time * 1000
    // 这里传入的时间戳是 10 位的，表示为秒数，所以要乘以 1000 转换为毫秒
    var date = new Date(_time);
    var Y = date.getFullYear();
    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
    var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
    var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
    var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
    var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
    // 处理与当前时间相比较的时间格式，比如：3分钟前、1小时前、1天前...
    let text = ''
    if (isGetText) {
      let nd = getDate(undefined, false)		// 获取现在的时间信息
      if (Y == nd.Y) {
        if (M == nd.M) {
          if (D == nd.D) {
            if (h == nd.h) {		// 同一个小时内
              let mc = nd.m - m
              if (mc > 0) {
                text = `${mc}分钟前`
              } else {
                text = `刚刚`		// 一分钟内的时间返回 "刚刚"
              }
            } else {
              text = `${nd.h - h}小时前`
            }
          } else {
            // 判断是否为昨天
            if (D == nd.D - 1) {
              text = `昨天 ${h}:${m}`
            } else {
              text = `${Y}年${M}月${D}日 ${h}:${m}`
            }
          }
        } else {
          text = `${Y}年${M}月${D}日 ${h}:${m}`
        }
      } else {
        text = `${Y}年${M}月${D}日 ${h}:${m}`
      }
    }


    // 返回一个对象
    let obj = {
      date: `${Y}年${M}月${D}日`,
      time: `${h}时${m}分${s}秒`,
      Y,
      M,
      D,
      h,
      m,
      s,
      text		// 这里返回的是类似于 1分钟前 这种文字
    }

    return obj;
  },
  /**
   * 校验是否为手机号
   * @param {*} phone 传入需要校验的手机号字符串
   * @returns true/false
   */
  isPhone(phone) {
    return new Promise(resolve => {
      let tag = false
      // 校验手机号的正则
      let reg = /^1[3|4|5|7|8][0-9]{9}$/
      if (reg.test(phone)) {
        tag = true
      }
      resolve(tag)
    })
  }

}
export default hooks